package inherit_super_final_0913;

import java.util.Arrays;

/**
 *final终结器,到此为止
 * 1.被final修饰的属性值无法修改，使用final关键字来定义常量
 * 2.被final修饰引用数据类型,引用指向的地址不能修改
 * 3.被final修饰的方法不能被重写
 * 4.被final修饰的类不能被继承，就是没有子类
 * 问题：为什么在jdk中String类要使用final修饰？？？
 * 保证jdk的使用者，大家用到的String类一模一样，没有别的版本
 */
public class FinalTest {
    public static void main(String[] args) {
        final int a=10;
        System.out.println(a);
        //final修饰的属性值无法修改，使用final关键字来定义常量
        //a=20错误
        final int []arr=new int[3];
        arr[0]=10;
        arr[1]=20;
        System.out.println(Arrays.toString(arr));
        int []arr1=new int [10];
        //final修饰引用数据类型,引用指向的地址不能修改
        //arr=arr1错误
    }
}

/**
 * 常量命名规则：
 * 常量使用全大写命名,多个单词使用_分割，不存在默认值
 * final int AGE=20;
 * final String STUDENT_NAME="小冷";
 */
class chines{
    String name;
    int age;
    //country在JVM堆中存储
    //成员变量每当产生对象时都会产生此常量值，在定义之后无法修改,会造成空间浪费
    final String country1="中国";
    // 因此在类中常量定义成静态常量，所有对象共享此常量，保存在JVM的方法区
    static final String country2="中国";
}
